#ifndef	__UTILS_H
#define	__UTILS_H

void memcpy(void *s1, const void *s2, int n);
void memset(void *s, const char ch, int n);
unsigned short ntohs(unsigned short s);
unsigned long ntohl(unsigned long l);
unsigned short htons(unsigned short s);
unsigned long htonl(unsigned long l);
unsigned long strtoul(char *s);
void ultostr(char *s, unsigned long data);
unsigned long strtobcd(char *s);
unsigned long strtodec(char *str, int cnt);
int strlen(const char *s);
int strncmp(const char *s1, const char *s2, int maxlen);

int getyorn(void);
void printf(char *f, ...);

int GetParameter(char *str, int cnt);

void outportb(U8, U32);
void outportw(U16, U32);
void outportl(U32, U32);
U8  inportb(U32);
U16 inportw(U32);
U32 inportl(U32);

U16  SerialSwitch(U16);
void SerialChgBaud(U32);
void SerialTxEmpty(void);
void SerialTxChar(char);
int  SerialRxReady(void);
char SerialRxKey(void);
char SerialRxChar(void);
int  SerialRxToBuf(char *);
void SerialTxString(char *);
int Uart_GetIntNum_GJ(void) ;

#define	kbhit	SerialRxReady
#define	getkey	SerialRxKey
#define	getch	SerialRxChar
#define	getchar	getch
#define	putch	SerialTxChar
#define	putchar	putch
#define	puts	SerialTxString

void SystemClockInit(void);
U32  GetCpuClock(void);
U32  GetMasterClock(void);
void TimerInit(U32);
void Delay(U32);
void RtcGetTime(TIME_STRUC *);

void ShowBootInfo(void);
void PortInit(void);
void Beep(U32, U32);
void LedSet(U32);
U16  GetKeyStatus(void);
void MemCfgInit(void);
void BoardInitStart(void);
void BoardInitEnd(void);
void CacheDisable(void);
void CacheEnable(void);
void CacheFlush(void);

void NFChipSel(U32);
int  NFIsReady(void);
void NFWrCmd(int);
void NFWrAddr(int);
void NFWrDat(int);
U8   NFRdDat(void);
void NandFlashInit(void);
void NandFlashStatusRep(void);

void GetIdeInfo(void);

typedef struct {
	char *string;
	void (*test_func)(void);
}CmdMenu;

extern CmdMenu cmd_menu[];

extern U32 download_addr, download_len;

#endif